import axios, { AxiosError } from 'axios'
import { Toast } from 'vant'

// 创建axios实例
// 创建请求时可以用的配置选项
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_REQUEST_URL,
  timeout: 30000
})

// 错误处理
const err = (error: AxiosError) => {
  console.error('axios error =>', error)
  Toast.fail(`服务错误${error.response ? `\n错误代码 ${error.response.status}` : ''}`)
  return Promise.reject(error)
}

/* 
  request interceptor
  请求拦截
  一般用于注入请求头
  与后端的鉴权配合
*/
service.interceptors.request.use(config => {
  // config.headers['User-key'] = store.state.user.userid

  // const token = store.state.user.token
  // if (token) {
  //   config.headers['Authorization'] = token
  // }
  return config
}, err)

/* 
  response interceptor
  响应拦截
  根据业务返回的code进行拦截

  常用:
  200 => 通过
  403 => 鉴权超时, 处理 重新请求token 或者 返回登录页 等操作
  500 => 后端业务错误
*/
service.interceptors.response.use(response => {
  const res = response.data
  if (res.code === 200) {
    return res
  } else if (res.code === 403) {
    Toast.fail(`鉴权超时`)
    return Promise.reject('鉴权超时!')
  } else {
    Toast.fail(`业务出错\n错误代码 ${res.code}`)
    return Promise.reject(res.msg)
  }
}, err)

export default service
